package br.com.fiap.vendas.business.dao.impl;

import br.com.fiap.vendas.business.dao.interfaces.PedidoDAO;
import br.com.fiap.vendas.business.entity.PedidoEntity;

import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.List;

/**
 * Created by jeferson on 1/26/14.
 */
@Local(PedidoDAO.class)
@Stateless
public class PedidoDAOImpl implements PedidoDAO {

    @PersistenceContext(unitName = "vendaDS")
    private EntityManager em;

    @Override
    public void inserirPedido(PedidoEntity pedidoEntity) {
        em.persist(pedidoEntity.getItemPedido());
        em.persist(pedidoEntity);
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<PedidoEntity> buscarPedidos() {
        Query query = em.createQuery(" select p from Pedido p ");
        return query.getResultList();
    }

    @Override
    public void atualizarPedido(PedidoEntity pedidoEntity) {
        em.merge(pedidoEntity);
    }

    @Override
    public PedidoEntity localizarPedido(Integer id) {
        return em.find(PedidoEntity.class, id);
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<PedidoEntity> buscarPedidosReservados() {
        Query query = em.createQuery(" select p from Pedido p where p.reserva = :reserva");
        query.setParameter("reserva", Boolean.TRUE);
        return query.getResultList();
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<PedidoEntity> buscarPedidosPorValor(BigDecimal valor) {
        Query query = em.createQuery(" select p from Pedido p where p.valorTotal <= :valor");
        query.setParameter("valor", valor);
        return query.getResultList();
    }
}
